Disco Diffusion
Contents
Disco Diffusion#
This is an simple way of creating compelling Disco Diffusion artworks for generative artists.
References:#
Prepare an environment#
from ekorpkit import eKonf
eKonf.setLogger("INFO")
eKonf.set_cuda(device=4)
print("version:", eKonf.__version__)
is_notebook = eKonf.is_notebook()
is_colab = eKonf.is_colab()
print("is notebook?", is_notebook)
print("is colab?", is_colab)
if is_colab:
eKonf.mount_google_drive(
workspace="MyDrive/colab_workspace", project="disco-imagen"
)
print("environment variables:")
eKonf.print(eKonf.env().dict())
INFO:ekorpkit.base:Setting cuda device to ['A100-SXM4-40GB (id:4)']
INFO:ekorpkit.utils.notebook:shell type: ZMQInteractiveShell
INFO:ekorpkit.utils.notebook:Google Colab not detected.
version: 0.1.38+30.g9d5fcfc.dirty
is notebook? True
is colab? False
environment variables:
{'CUDA_DEVICE_ORDER': 'PCI_BUS_ID',
'CUDA_VISIBLE_DEVICES': '4',
'EKORPKIT_CONFIG_DIR': '/workspace/projects/ekorpkit-book/config',
'EKORPKIT_DATA_DIR': None,
'EKORPKIT_LOG_LEVEL': 'INFO',
'EKORPKIT_PROJECT': 'ekorpkit-book',
'EKORPKIT_WORKSPACE_ROOT': '/workspace',
'KMP_DUPLICATE_LIB_OK': 'TRUE',
'NUM_WORKERS': 230}
Create a disco instance#
cfg = eKonf.compose("model/disco")
disco = eKonf.instantiate(cfg)
print(f"Version: {disco.version}")
INFO:ekorpkit.base:Loaded .env from /workspace/projects/ekorpkit-book/config/.env
INFO:ekorpkit.utils.notebook:shell type: ZMQInteractiveShell
INFO:ekorpkit.base:setting environment variable CACHED_PATH_CACHE_ROOT to /workspace/.cache/cached_path
INFO:ekorpkit.base:setting environment variable KMP_DUPLICATE_LIB_OK to TRUE
INFO:ekorpkit.models.art.base:> downloading models...
INFO:ekorpkit.models.disco.base:Downloading model 256x256_diffusion_uncond from {'SHA': '983e3de6f95c88c81b2ca7ebb2c217933be1973b1ff058776b970f901584613a', 'filename': '256x256_diffusion_uncond.pt', 'link': 'https://openaipublic.blob.core.windows.net/diffusion/jul-2021/256x256_diffusion_uncond.pt', 'link_fb': 'https://www.dropbox.com/s/9tqnqo930mpnpcn/256x256_diffusion_uncond.pt', 'archive_path': '/workspace/data/archive/disco-imagen/models/256x256_diffusion_uncond.pt', 'path': '/workspace/projects/ekorpkit-book/disco-imagen/models/256x256_diffusion_uncond.pt'}
INFO:ekorpkit.models.disco.utils:Model 256x256_diffusion_uncond already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model 512x512_diffusion_uncond_finetune_008100 from {'SHA': '9c111ab89e214862b76e1fa6a1b3f1d329b1a88281885943d2cdbe357ad57648', 'filename': '512x512_diffusion_uncond_finetune_008100.pt', 'link': 'https://the-eye.eu/public/AI/models/512x512_diffusion_unconditional_ImageNet/512x512_diffusion_uncond_finetune_008100.pt', 'link_fb': 'https://huggingface.co/lowlevelware/512x512_diffusion_unconditional_ImageNet/resolve/main/512x512_diffusion_uncond_finetune_008100.pt', 'archive_path': '/workspace/data/archive/disco-imagen/models/512x512_diffusion_uncond_finetune_008100.pt', 'path': '/workspace/projects/ekorpkit-book/disco-imagen/models/512x512_diffusion_uncond_finetune_008100.pt'}
INFO:ekorpkit.models.disco.utils:Model 512x512_diffusion_uncond_finetune_008100 already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model portrait_generator_v001 from {'SHA': 'b7e8c747af880d4480b6707006f1ace000b058dd0eac5bb13558ba3752d9b5b9', 'filename': 'portrait_generator_v001_ema_0.9999_1MM.pt', 'link': 'https://huggingface.co/felipe3dartist/portrait_generator_v001/resolve/main/portrait_generator_v001_ema_0.9999_1MM.pt', 'archive_path': '/workspace/data/archive/disco-imagen/models/portrait_generator_v001_ema_0.9999_1MM.pt', 'path': '/workspace/projects/ekorpkit-book/disco-imagen/models/portrait_generator_v001_ema_0.9999_1MM.pt'}
INFO:ekorpkit.models.disco.utils:Model portrait_generator_v001 already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model pixelartdiffusion_expanded from {'SHA': 'a73b40556634034bf43b5a716b531b46fb1ab890634d854f5bcbbef56838739a', 'filename': 'PADexpanded.pt', 'link': 'https://huggingface.co/KaliYuga/PADexpanded/resolve/main/PADexpanded.pt', 'archive_path': '/workspace/data/archive/disco-imagen/models/PADexpanded.pt', 'path': '/workspace/projects/ekorpkit-book/disco-imagen/models/PADexpanded.pt'}
INFO:ekorpkit.models.disco.utils:Model pixelartdiffusion_expanded already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model pixel_art_diffusion_hard_256 from {'SHA': 'be4a9de943ec06eef32c65a1008c60ad017723a4d35dc13169c66bb322234161', 'filename': 'pixel_art_diffusion_hard_256.pt', 'link': 'https://huggingface.co/KaliYuga/pixel_art_diffusion_hard_256/resolve/main/pixel_art_diffusion_hard_256.pt', 'archive_path': '/workspace/data/archive/disco-imagen/models/pixel_art_diffusion_hard_256.pt', 'path': '/workspace/projects/ekorpkit-book/disco-imagen/models/pixel_art_diffusion_hard_256.pt'}
INFO:ekorpkit.models.disco.utils:Model pixel_art_diffusion_hard_256 already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model pixel_art_diffusion_soft_256 from {'SHA': 'd321590e46b679bf6def1f1914b47c89e762c76f19ab3e3392c8ca07c791039c', 'filename': 'pixel_art_diffusion_soft_256.pt', 'link': 'https://huggingface.co/KaliYuga/pixel_art_diffusion_soft_256/resolve/main/pixel_art_diffusion_soft_256.pt', 'archive_path': '/workspace/data/archive/disco-imagen/models/pixel_art_diffusion_soft_256.pt', 'path': '/workspace/projects/ekorpkit-book/disco-imagen/models/pixel_art_diffusion_soft_256.pt'}
INFO:ekorpkit.models.disco.utils:Model pixel_art_diffusion_soft_256 already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model pixelartdiffusion4k from {'SHA': 'a1ba4f13f6dabb72b1064f15d8ae504d98d6192ad343572cc416deda7cccac30', 'filename': 'pixelartdiffusion4k.pt', 'link': 'https://huggingface.co/KaliYuga/pixelartdiffusion4k/resolve/main/pixelartdiffusion4k.pt', 'archive_path': '/workspace/data/archive/disco-imagen/models/pixelartdiffusion4k.pt', 'path': '/workspace/projects/ekorpkit-book/disco-imagen/models/pixelartdiffusion4k.pt'}
INFO:ekorpkit.models.disco.utils:Model pixelartdiffusion4k already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model watercolordiffusion_2 from {'SHA': '49c281b6092c61c49b0f1f8da93af9b94be7e0c20c71e662e2aa26fee0e4b1a9', 'filename': 'watercolordiffusion_2.pt', 'link': 'https://huggingface.co/KaliYuga/watercolordiffusion_2/resolve/main/watercolordiffusion_2.pt', 'archive_path': '/workspace/data/archive/disco-imagen/models/watercolordiffusion_2.pt', 'path': '/workspace/projects/ekorpkit-book/disco-imagen/models/watercolordiffusion_2.pt'}
INFO:ekorpkit.models.disco.utils:Model watercolordiffusion_2 already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model watercolordiffusion from {'SHA': 'a3e6522f0c8f278f90788298d66383b11ac763dd5e0d62f8252c962c23950bd6', 'filename': 'watercolordiffusion.pt', 'link': 'https://huggingface.co/KaliYuga/watercolordiffusion/resolve/main/watercolordiffusion.pt', 'archive_path': '/workspace/data/archive/disco-imagen/models/watercolordiffusion.pt', 'path': '/workspace/projects/ekorpkit-book/disco-imagen/models/watercolordiffusion.pt'}
INFO:ekorpkit.models.disco.utils:Model watercolordiffusion already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model PulpSciFiDiffusion from {'SHA': 'b79e62613b9f50b8a3173e5f61f0320c7dbb16efad42a92ec94d014f6e17337f', 'filename': 'PulpSciFiDiffusion.pt', 'link': 'https://huggingface.co/KaliYuga/PulpSciFiDiffusion/resolve/main/PulpSciFiDiffusion.pt', 'archive_path': '/workspace/data/archive/disco-imagen/models/PulpSciFiDiffusion.pt', 'path': '/workspace/projects/ekorpkit-book/disco-imagen/models/PulpSciFiDiffusion.pt'}
INFO:ekorpkit.models.disco.utils:Model PulpSciFiDiffusion already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model model_secondary from {'SHA': '983e3de6f95c88c81b2ca7ebb2c217933be1973b1ff058776b970f901584613a', 'filename': 'secondary_model_imagenet_2.pth', 'link': 'https://huggingface.co/spaces/huggi/secondary_model_imagenet_2.pth/resolve/main/secondary_model_imagenet_2.pth', 'link_fb': 'https://the-eye.eu/public/AI/models/v-diffusion/secondary_model_imagenet_2.pth', 'archive_path': '/workspace/data/archive/disco-imagen/models/secondary_model_imagenet_2.pth', 'path': '/workspace/projects/ekorpkit-book/disco-imagen/models/secondary_model_imagenet_2.pth'}
INFO:ekorpkit.models.disco.utils:Model model_secondary already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model MiDaS from {'filename': 'dpt_large-midas-2f21e586.pt', 'link': 'https://github.com/intel-isl/DPT/releases/download/1_0/dpt_large-midas-2f21e586.pt', 'archive_path': '/workspace/data/archive/disco-imagen/models/dpt_large-midas-2f21e586.pt', 'path': '/workspace/projects/ekorpkit-book/disco-imagen/models/dpt_large-midas-2f21e586.pt'}
INFO:ekorpkit.models.disco.utils:Model MiDaS already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model model-lpips from {'filename': 'vgg16-397923af.pth', 'link': 'https://download.pytorch.org/models/vgg16-397923af.pth', 'archive_path': '/workspace/data/archive/disco-imagen/model-lpips/vgg16-397923af.pth', 'path': '/root/.cache/torch/hub/checkpoints/vgg16-397923af.pth'}
INFO:ekorpkit.models.disco.utils:Model model-lpips already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model AdaBins from {'filename': 'AdaBins_nyu.pt', 'link': 'https://cloudflare-ipfs.com/ipfs/Qmd2mMnDLWePKmgfS8m6ntAg4nhV5VkUyAydYBp8cWWeB7/AdaBins_nyu.pt', 'archive_path': '/workspace/data/archive/disco-imagen/pretrained/AdaBins_nyu.pt', 'path': '/workspace/projects/ekorpkit-book/disco-imagen/pretrained/AdaBins_nyu.pt'}
INFO:ekorpkit.models.disco.utils:Model AdaBins already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model RN50 from {'filename': 'RN50.pt', 'link': 'https://openaipublic.azureedge.net/clip/models/afeb0e10f9e5a86da6080e35cf09123aca3b358a0c3e3b6c78a7b63bc04b6762/RN50.pt', 'archive_path': '/workspace/data/archive/disco-imagen/clip/RN50.pt', 'path': '/root/.cache/clip/RN50.pt'}
INFO:ekorpkit.models.disco.utils:Model RN50 already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model RN101 from {'filename': 'RN101.pt', 'link': 'https://openaipublic.azureedge.net/clip/models/8fa8567bab74a42d41c5915025a8e4538c3bdbe8804a470a72f30b0d94fab599/RN101.pt', 'archive_path': '/workspace/data/archive/disco-imagen/clip/RN101.pt', 'path': '/root/.cache/clip/RN101.pt'}
INFO:ekorpkit.models.disco.utils:Model RN101 already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model RN50x4 from {'filename': 'RN50x4.pt', 'link': 'https://openaipublic.azureedge.net/clip/models/7e526bd135e493cef0776de27d5f42653e6b4c8bf9e0f653bb11773263205fdd/RN50x4.pt', 'archive_path': '/workspace/data/archive/disco-imagen/clip/RN50x4.pt', 'path': '/root/.cache/clip/RN50x4.pt'}
INFO:ekorpkit.models.disco.utils:Model RN50x4 already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model RN50x16 from {'filename': 'RN50x16.pt', 'link': 'https://openaipublic.azureedge.net/clip/models/52378b407f34354e150460fe41077663dd5b39c54cd0bfd2b27167a4a06ec9aa/RN50x16.pt', 'archive_path': '/workspace/data/archive/disco-imagen/clip/RN50x16.pt', 'path': '/root/.cache/clip/RN50x16.pt'}
INFO:ekorpkit.models.disco.utils:Model RN50x16 already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model RN50x64 from {'filename': 'RN50x64.pt', 'link': 'https://openaipublic.azureedge.net/clip/models/be1cfb55d75a9666199fb2206c106743da0f6468c9d327f3e0d0a543a9919d9c/RN50x64.pt', 'archive_path': '/workspace/data/archive/disco-imagen/clip/RN50x64.pt', 'path': '/root/.cache/clip/RN50x64.pt'}
INFO:ekorpkit.models.disco.utils:Model RN50x64 already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model ViT-B-32 from {'filename': 'ViT-B-32.pt', 'link': 'https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt', 'archive_path': '/workspace/data/archive/disco-imagen/clip/ViT-B-32.pt', 'path': '/root/.cache/clip/ViT-B-32.pt'}
INFO:ekorpkit.models.disco.utils:Model ViT-B-32 already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model ViT-B-16 from {'filename': 'ViT-B-16.pt', 'link': 'https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt', 'archive_path': '/workspace/data/archive/disco-imagen/clip/ViT-B-16.pt', 'path': '/root/.cache/clip/ViT-B-16.pt'}
INFO:ekorpkit.models.disco.utils:Model ViT-B-16 already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model ViT-L-14 from {'filename': 'ViT-L-14.pt', 'link': 'https://openaipublic.azureedge.net/clip/models/b8cca3fd41ae0c99ba7e8951adf17d267cdb84cd88be6f7c2e0eca1737a03836/ViT-L-14.pt', 'archive_path': '/workspace/data/archive/disco-imagen/clip/ViT-L-14.pt', 'path': '/root/.cache/clip/ViT-L-14.pt'}
INFO:ekorpkit.models.disco.utils:Model ViT-L-14 already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.disco.base:Downloading model RAFT from {'filename': 'raft-things.pth', 'link': 'https://www.dropbox.com/s/4j4z58wuv8o0mfz/models.zip?dl=1', 'archive_path': '/workspace/data/archive/disco-imagen/models/RAFT/models/raft-things.pth', 'path': '/workspace/projects/ekorpkit-book/disco-imagen/models/raft-things.pth', 'zip_path': '/workspace/data/archive/disco-imagen/models/RAFT/models.zip', 'unzip': True}
INFO:ekorpkit.models.disco.utils:Model RAFT already downloaded, set check_model_SHA to true if the file is corrupt
INFO:ekorpkit.models.art.base:> loading modules...
INFO:ekorpkit.utils.lib:clip not imported, loading from /workspace/projects/ekorpkit-book/disco-imagen/libs/CLIP as clip
INFO:torch.distributed.nn.jit.instantiator:Created a temporary directory at /tmp/tmporuh0o5e
INFO:torch.distributed.nn.jit.instantiator:Writing /tmp/tmporuh0o5e/_remote_module_non_sriptable.py
INFO:ekorpkit.utils.lib:open_clip not imported, loading from /workspace/projects/ekorpkit-book/disco-imagen/libs/open_clip/src as open_clip
INFO:ekorpkit.utils.lib:guided_diffusion.script_util not imported, loading from /workspace/projects/ekorpkit-book/disco-imagen/libs/guided-diffusion as guided_diffusion.script_util
INFO:ekorpkit.utils.lib:resize_right not imported, loading from /workspace/projects/ekorpkit-book/disco-imagen/libs/ResizeRight as resize_right
INFO:ekorpkit.utils.lib:py3d_tools not imported, loading from /workspace/projects/ekorpkit-book/disco-imagen/libs/pytorch3d-lite as py3d_tools
INFO:ekorpkit.utils.lib:midas.dpt_depth not imported, loading from /workspace/projects/ekorpkit-book/disco-imagen/libs/MiDaS as midas.dpt_depth
INFO:ekorpkit.utils.lib:utils not imported, loading from /workspace/projects/ekorpkit-book/disco-imagen/libs/MiDaS as midas_utils
INFO:ekorpkit.utils.lib:infer not imported, loading from /workspace/projects/ekorpkit-book/disco-imagen/libs/AdaBins as infer
INFO:ekorpkit.utils.lib:utils.flow_viz not imported, loading from /workspace/projects/ekorpkit-book/disco-imagen/libs/RAFT/core as flow_viz
INFO:ekorpkit.utils.lib:utils.utils not imported, loading from /workspace/projects/ekorpkit-book/disco-imagen/libs/RAFT/core as utils.utils
INFO:ekorpkit.utils.lib:raft imported
INFO:ekorpkit.models.art.base:> loading models...
INFO:ekorpkit.models.disco.base:> loading diffusion models...
INFO:ekorpkit.models.disco.base:Using device:cuda:4
INFO:ekorpkit.models.disco.base:Disabling CUDNN for A100 gpu
INFO:ekorpkit.models.disco.base:Loading diffusion model: 512x512_diffusion_uncond_finetune_008100
INFO:ekorpkit.models.disco.base:Loading secondary model: /workspace/projects/ekorpkit-book/disco-imagen/models/secondary_model_imagenet_2.pth
INFO:ekorpkit.models.disco.base:> loading clip models...
INFO:root:Loading ViT-B-32 model config.
INFO:root:Loading pretrained ViT-B-32 weights (laion400m_e32).
INFO:root:Loading RN50 model config.
INFO:root:Loading pretrained RN50 weights (cc12m).
Setting up [LPIPS] perceptual loss: trunk [vgg], v[0.1], spatial [off]
Loading model from: /opt/conda/lib/python3.8/site-packages/lpips/weights/v0.1/vgg.pth
Version: v5.61
Image only mode#
disco.config.models.openclip_models.RN101_quickgelu_yfcc15m = True
disco.config.models.openclip_models.ViTB32_laion2b_e16 = True
disco.config.models.diffusion_model = "watercolordiffusion"
eKonf.print(disco.config.models)
# If you change model configs, you have to reload models
disco.load_models()
INFO:ekorpkit.models.disco.base:> loading diffusion models...
INFO:ekorpkit.models.disco.base:Using device:cuda:4
INFO:ekorpkit.models.disco.base:Disabling CUDNN for A100 gpu
INFO:ekorpkit.models.disco.base:Loading diffusion model: watercolordiffusion
INFO:ekorpkit.models.disco.base:Loading secondary model: /workspace/projects/ekorpkit-book/disco-imagen/models/secondary_model_imagenet_2.pth
INFO:ekorpkit.models.disco.base:> loading clip models...
{'clip_models': {'RN101': False,
'RN50': False,
'RN50x16': False,
'RN50x4': False,
'RN50x64': False,
'ViTB16': True,
'ViTB32': True,
'ViTL14': False,
'ViTL14_336px': False},
'custom_model': 'ema_0.9999_058000.pt',
'diffusion_model': 'watercolordiffusion',
'openclip_models': {'RN101_quickgelu_yfcc15m': True,
'RN101_yfcc15m': False,
'RN50_cc12m': True,
'RN50_quickgelu_cc12m': False,
'RN50_quickgelu_yfcc15m': False,
'RN50_yffcc15m': False,
'ViTB16_laion400m_e31': False,
'ViTB16_laion400m_e32': False,
'ViTB32_laion2b_e16': True,
'ViTB32_laion400m_e31': False,
'ViTB32_laion400m_e32': True,
'ViTB32quickgelu_laion400m_e31': False,
'ViTB32quickgelu_laion400m_e32': False}}
INFO:root:Loading ViT-B-32 model config.
INFO:root:Loading pretrained ViT-B-32 weights (laion2b_e16).
INFO:root:Loading ViT-B-32 model config.
INFO:root:Loading pretrained ViT-B-32 weights (laion400m_e32).
INFO:root:Loading RN50 model config.
INFO:root:Loading pretrained RN50 weights (cc12m).
INFO:root:Loading RN101-quickgelu model config.
INFO:root:Loading pretrained RN101-quickgelu weights (yfcc15m).
Setting up [LPIPS] perceptual loss: trunk [vgg], v[0.1], spatial [off]
Loading model from: /opt/conda/lib/python3.8/site-packages/lpips/weights/v0.1/vgg.pth
text_prompts = "A beautiful water painting of Jeju Island."
batch_name = "jeju"
results = disco.imagine(
text_prompts,
batch_name=batch_name,
n_samples=2,
steps=200,
show_collage=True,
diffusion_sampling_mode='ddim',
clip_guidance_scale=7500,
use_secondary_model=False,
)
INFO:ekorpkit.models.disco.base:Image prompt: []
INFO:ekorpkit.models.disco.base:Sample 1 Prompt: ['A beautiful painting of Jeju Island.']
INFO:ekorpkit.utils.notebook:shell type: ZMQInteractiveShell
INFO:ekorpkit.models.disco.base:Saved jeju(6)_0001.png
INFO:ekorpkit.models.disco.base:Seed used: 3610975411
INFO:ekorpkit.models.disco.base: >> elapsed time to diffuse: 0:11:05.648947
INFO:ekorpkit.models.art.base:Merging config with args: {}
INFO:ekorpkit.models.art.base:Prompt: A beautiful painting of Jeju Island.
2 samples generated to /workspace/projects/ekorpkit-book/disco-imagen/outputs/disco-diffusion/jeju
text prompts: A beautiful painting of Jeju Island.
sample image paths:
/workspace/projects/ekorpkit-book/disco-imagen/outputs/disco-diffusion/jeju/jeju(6)_0000.png
/workspace/projects/ekorpkit-book/disco-imagen/outputs/disco-diffusion/jeju/jeju(6)_0001.png
INFO:ekorpkit.models.art.base:Saving config to /workspace/projects/ekorpkit-book/disco-imagen/outputs/disco-diffusion/jeju/jeju(6)_settings.yaml
results
{'image_filepaths': ['/workspace/projects/ekorpkit-book/disco-imagen/outputs/disco-diffusion/jeju/jeju(6)_0000.png',
'/workspace/projects/ekorpkit-book/disco-imagen/outputs/disco-diffusion/jeju/jeju(6)_0001.png'],
'config_file': 'jeju(6)_settings.yaml',
'config': {'animation_mode': 'None',
'batch_name': 'jeju',
'display_rate': 20,
'n_samples': 2,
'batch_size': 1,
'resume_run': False,
'run_to_resume': 'latest',
'resume_from_frame': 'latest',
'retain_overwritten_frames': True,
'show_collage': True,
'diffusion_sampling_mode': 'ddim',
'use_secondary_model': False,
'steps': 200,
'width_height': [512, 448],
'width_height_for_512x512_models': [1280, 768],
'width_height_for_256x256_models': [512, 448],
'clip_guidance_scale': 7500,
'tv_scale': 0,
'range_scale': 150,
'sat_scale': 0,
'cutn_batches': 4,
'skip_augs': False,
'init_image': 'None',
'init_scale': 1000,
'skip_steps': 10,
'frames_scale': 1500,
'frames_skip_steps': '60%',
'video_init_steps': 100,
'video_init_clip_guidance_scale': 1000,
'video_init_tv_scale': 0.1,
'video_init_range_scale': 150,
'video_init_sat_scale': 300,
'video_init_cutn_batches': 4,
'video_init_skip_steps': 50,
'video_init_file': 'init.mp4',
'video_init_path': '/workspace/projects/ekorpkit-book/disco-imagen/init_images/init.mp4',
'extract_nth_frame': 2,
'persistent_frame_output_in_batch_folder': True,
'video_init_seed_continuity': False,
'video_init_flow_warp': True,
'video_init_flow_blend': 0.999,
'video_init_check_consistency': False,
'video_init_blend_mode': 'optical flow',
'video_init_frames_scale': 15000,
'video_init_frames_skip_steps': '70%',
'force_flow_generation': False,
'key_frames': True,
'max_frames': 1,
'interp_spline': 'Linear',
'angle': '0:(0)',
'zoom': '0: (1), 10: (1.05)',
'translation_x': '0: (0)',
'translation_y': '0: (0)',
'translation_z': '0: (10.0)',
'rotation_3d_x': '0: (0)',
'rotation_3d_y': '0: (0)',
'rotation_3d_z': '0: (0)',
'midas_depth_model': 'dpt_large',
'midas_weight': 0.3,
'near_plane': 200,
'far_plane': 10000,
'fov': 40,
'padding_mode': 'border',
'sampling_mode': 'bicubic',
'turbo_mode': False,
'turbo_steps': '3',
'turbo_preroll': 10,
'vr_mode': False,
'vr_eye_angle': 0.5,
'vr_ipd': 5.0,
'intermediate_saves': [],
'steps_per_checkpoint': None,
'intermediates_in_subfolder': True,
'perlin_init': False,
'perlin_mode': 'mixed',
'set_seed': 'random_seed',
'eta': 0.8,
'clamp_grad': True,
'clamp_max': 0.05,
'randomize_class': True,
'clip_denoised': False,
'fuzzy_prompt': False,
'rand_mag': 0.05,
'cut_overview': '[14]*200+[12]*200+[4]*400+[0]*200',
'cut_innercut': '[2]*200+[4]*200+[12]*400+[12]*200',
'cut_ic_pow': '[12]*300+[12]*100+[12]*50+[12]*50+[10]*100+[10]*100+[10]*300',
'cut_icgray_p': '[0.7]*100+[0.6]*100+[0.45]*100+[0.3]*100+[0]*600',
'pad_or_pulp_cut_overview': '[15]*100+[15]*100+[12]*100+[12]*100+[6]*100+[4]*100+[2]*200+[0]*200',
'pad_or_pulp_cut_innercut': '[1]*100+[1]*100+[4]*100+[4]*100+[8]*100+[8]*100+[10]*200+[10]*200',
'pad_or_pulp_cut_ic_pow': '[12]*300+[12]*100+[12]*50+[12]*50+[10]*100+[10]*100+[10]*300',
'pad_or_pulp_cut_icgray_p': '[0.87]*100+[0.78]*50+[0.73]*50+[0.64]*60+[0.56]*40+[0.50]*50+[0.33]*100+[0.19]*150+[0]*400',
'watercolor_cut_overview': '[14]*200+[12]*200+[4]*400+[0]*200',
'watercolor_cut_innercut': '[2]*200+[4]*200+[12]*400+[12]*200',
'watercolor_cut_ic_pow': '[12]*300+[12]*100+[12]*50+[12]*50+[10]*100+[10]*100+[10]*300',
'watercolor_cut_icgray_p': '[0.7]*100+[0.6]*100+[0.45]*100+[0.3]*100+[0]*600',
'use_vertical_symmetry': False,
'use_horizontal_symmetry': False,
'transformation_percent': [0.09],
'video_output': {'skip_video_for_run_all': False,
'blend': 0.5,
'video_init_check_consistency': False,
'init_frame': 1,
'last_frame': 'final_frame',
'fps': 12,
'view_video_in_cell': False},
'models': {'diffusion_model': 'watercolordiffusion',
'clip_models': {'ViTB32': True,
'ViTB16': True,
'ViTL14': False,
'ViTL14_336px': False,
'RN50x4': False,
'RN50x16': False,
'RN50x64': False,
'RN50': False,
'RN101': False},
'openclip_models': {'ViTB32_laion2b_e16': True,
'ViTB32_laion400m_e31': False,
'ViTB32_laion400m_e32': True,
'ViTB32quickgelu_laion400m_e31': False,
'ViTB32quickgelu_laion400m_e32': False,
'ViTB16_laion400m_e31': False,
'ViTB16_laion400m_e32': False,
'RN50_yffcc15m': False,
'RN50_cc12m': True,
'RN50_quickgelu_yfcc15m': False,
'RN50_quickgelu_cc12m': False,
'RN101_yfcc15m': False,
'RN101_quickgelu_yfcc15m': True},
'custom_model': 'ema_0.9999_058000.pt'},
'text_prompts': {0: ['A beautiful painting of Jeju Island.']},
'image_prompts': None,
'batch_num': 6,
'stop_on_next_loop': False,
'side_x': 512,
'side_y': 448,
'calc_frames_skip_steps': 120,
'start_frame': 0,
'start_sample': 0,
'seed': 3610975411}}
3D animation mode#
text_prompts = {
0: "A beautiful new world in Jeju, artstation matte painting.",
100: "Beautiful mountains in Jeju, artstation matte painting.",
300: "A beautiful sea in Jeju, artstation matte painting.",
500: "A beautiful woman in Jeju, artstation matte painting.",
700: "A beautiful wind in Jeju, artstation matte painting.",
900: "A beautiful new world in Jeju, artstation matte painting.",
}
batch_name = "newworld-3d"
disco.imagine(
text_prompts,
batch_name=batch_name,
batch_num=11,
resume_run=True,
steps=300,
animation_mode="3D",
rotation_3d_z="0: (0), 500: (1), 600: (-1)",
# perlin_init=True,
# perlin_mode="color",
diffusion_sampling_mode='ddim',
max_frames = 5000,
width_height = [768, 512],
clip_guidance_scale=7500,
)
INFO:ekorpkit.models.disco.base:translation_x: 0.0
INFO:ekorpkit.models.disco.base:translation_y: 0.0
INFO:ekorpkit.models.disco.base:translation_z: 10.0
INFO:ekorpkit.models.disco.base:rotation_3d_x: 0.0
INFO:ekorpkit.models.disco.base:rotation_3d_y: 0.0
INFO:ekorpkit.models.disco.base:rotation_3d_z: -0.6799999999999999
INFO:ekorpkit.models.disco.base:translation: [-0.0, 0.0, -0.05]
INFO:ekorpkit.models.disco.base:rotation: [0.0, 0.0, -0.6799999999999999]
INFO:ekorpkit.models.disco.base:rot_mat: tensor([[[ 1.0000, 0.0119, 0.0000],
[-0.0119, 1.0000, 0.0000],
[ 0.0000, 0.0000, 1.0000]]], device='cuda:4')
INFO:ekorpkit.models.disco.disco_xform_utils:Running AdaBins depth estimation implementation...
Loading base model ()...
Using cache found in /root/.cache/torch/hub/rwightman_gen-efficientnet-pytorch_master
Done.
Removing last two layers (global_pool & classifier).
Building Encoder-Decoder model..Done.
INFO:ekorpkit.models.disco.disco_xform_utils:Running MiDaS depth estimation implementation...
2D animation mode#
text_prompts = "Brave and beautiful new world in Jeju, artstation matte painting."
batch_name = "newworld-2d"
disco.imagine(
text_prompts,
batch_name=batch_name,
steps=300,
animation_mode = '2D',
# rotation_3d_z="0: (1)",
# perlin_init=True,
# perlin_mode="color",
diffusion_sampling_mode='ddim',
max_frames = 50,
width_height = [768, 512],
clip_guidance_scale=7500,
)
Video Input Mode#
text_prompts = "A beautiful new world in Jeju, artstation matte painting."
batch_name = "newworld-video"
disco.imagine(
text_prompts,
batch_name=batch_name,
steps=250,
animation_mode="Video Input",
video_init_path="/workspace/projects/ekorpkit-book/disco-imagen/outputs/disco-diffusion/newworld-3d/newworld-3d(9).mp4",
# rotation_3d_z="0: (1)",
# perlin_init=True,
# perlin_mode="color",
diffusion_sampling_mode='ddim',
max_frames = 10,
width_height = [768, 512],
clip_guidance_scale=7500,
)
INFO:ekorpkit.models.disco.base:warping frames with flow blend ratio: 0.999
INFO:ekorpkit.models.disco.base:Image prompt: []
INFO:ekorpkit.models.disco.base:Frame 4 Prompt: ['A beautiful new world in Jeju, artstation matte painting.']
INFO:ekorpkit.models.disco.base:Seed used: 3402861987
INFO:ekorpkit.models.disco.base: >> elapsed time to diffuse: 0:02:33.218085
INFO:ekorpkit.models.art.base:Saving config to /workspace/projects/ekorpkit-book/disco-imagen/outputs/disco-diffusion/newworld-video/newworld-video(0)_settings.yaml
Create a video from output frames#
batch_name = "newworld-video"
batch_num = 0
mp4_path = disco.create_video(
batch_name=batch_name,
batch_num=batch_num,
)
from IPython.display import Video
Video(mp4_path, embed=True)
collage generated sample images#
disco.collage(
batch_name=batch_name,
batch_num=4,
ncols=2,
num_images=4,
show_filename=True,
fontcolor="black",
)
INFO:ekorpkit.models.dalle.base:Loading config from /workspace/projects/ekorpkit-book/disco-imagen/outputs/disco-diffusion/halla/halla(4)_settings.yaml
INFO:ekorpkit.models.dalle.base:Merging config with diffuse defaults
INFO:ekorpkit.models.disco.base:Will save every 2 steps
INFO:ekorpkit.models.disco.base:Using seed: 221812581
INFO:ekorpkit.models.dalle.base:Prompt: Mt. Halla's beautiful flowers, artstation matte painting
INFO:ekorpkit.io.file:Processing [4] files from ['halla(4)_*.png']
make gif of progresses of a specific sample image#
disco.make_gif(
batch_name='halla',
batch_num=1,
sample_num=1,
show=False,
duration=100,
force_remake=True,
)
Saved GIF to /workspace/projects/ekorpkit-book/disco-imagen/outputs/halla/halla(1)_0001.gif
show config#
disco.show_config(batch_name=batch_name, batch_num=4)
INFO:ekorpkit.models.disco.base:Loading config from /workspace/projects/ekorpkit-book/disco-imagen/outputs/halla/halla(4)_settings.yaml
INFO:ekorpkit.models.disco.base:Merging config with diffuse defaults
INFO:ekorpkit.models.disco.base:Merging config with args: {}
INFO:ekorpkit.models.disco.base:Will save every 2 steps
INFO:ekorpkit.models.disco.base:Using seed: 3370684779
{'angle': '0:(0)',
'animation_mode': 'None',
'batch_name': 'halla',
'batch_num': 7,
'batch_size': 1,
'calc_frames_skip_steps': 150,
'clamp_grad': True,
'clamp_max': 0.05,
'clip_denoised': False,
'clip_guidance_scale': 5000,
'cut_ic_pow': 1,
'cut_icgray_p': '[0.2]*400+[0]*600',
'cut_innercut': '[4]*400+[12]*600',
'cut_overview': '[12]*400+[4]*600',
'cutn_batches': 4,
'display_rate': 20,
'eta': 0.8,
'extract_nth_frame': 2,
'far_plane': 10000,
'force_flow_generation': False,
'fov': 40,
'frames_scale': 1500,
'frames_skip_steps': '60%',
'fuzzy_prompt': False,
'image_prompts': None,
'init_image': 'None',
'init_scale': 1000,
'intermediate_saves': 250,
'intermediates_in_subfolder': True,
'interp_spline': 'Linear',
'key_frames': True,
'max_frames': 1,
'midas_depth_model': 'dpt_large',
'midas_weight': 0.3,
'n_samples': 4,
'near_plane': 200,
'padding_mode': 'border',
'perlin_init': False,
'perlin_mode': 'mixed',
'persistent_frame_output_in_batch_folder': True,
'rand_mag': 0.05,
'randomize_class': True,
'range_scale': 150,
'resume_from_frame': 'latest',
'resume_run': False,
'retain_overwritten_frames': False,
'rotation_3d_x': '0: (0)',
'rotation_3d_y': '0: (0)',
'rotation_3d_z': '0: (0)',
'run_to_resume': 'latest',
'sampling_mode': 'bicubic',
'sat_scale': 0,
'seed': 3370684779,
'set_seed': 'random_seed',
'show_collage': True,
'side_x': 768,
'side_y': 512,
'skip_augs': False,
'skip_steps': 10,
'start_frame': 0,
'steps': 250,
'steps_per_checkpoint': 2,
'stop_on_next_loop': False,
'text_prompts': {0: ["Mt. Halla's beautiful flowers, artstation matte "
'painting'],
100: ['This set of prompts start at frame 100',
'This prompt has weight five:5']},
'transformation_percent': [0.09],
'translation_x': '0: (0)',
'translation_y': '0: (0)',
'translation_z': '0: (10.0)',
'turbo_mode': False,
'turbo_preroll': 10,
'turbo_steps': '3',
'tv_scale': 0,
'use_horizontal_symmetry': False,
'use_vertical_symmetry': False,
'video_init_blend_mode': 'optical flow',
'video_init_check_consistency': False,
'video_init_clip_guidance_scale': 1000,
'video_init_cutn_batches': 4,
'video_init_file': 'init.mp4',
'video_init_flow_blend': 0.999,
'video_init_flow_warp': True,
'video_init_frames_scale': 15000,
'video_init_frames_skip_steps': '70%',
'video_init_path': '/workspace/projects/ekorpkit-book/disco-imagen/init_images/init.mp4',
'video_init_range_scale': 150,
'video_init_sat_scale': 300,
'video_init_seed_continuity': False,
'video_init_skip_steps': 50,
'video_init_steps': 100,
'video_init_tv_scale': 0.1,
'vr_eye_angle': 0.5,
'vr_ipd': 5.0,
'vr_mode': False,
'width_height': [768, 512],
'zoom': '0: (1), 10: (1.05)'}
Model Parameters#
disco.parameters()
{'advanced': {'clamp_grad': "true {type: 'boolean'}",
'clamp_max': "0.05 {type: 'number'}",
'eta': "0.8 {type: 'number'}",
'set_seed': "random_seed {type: 'string'}"},
'advanced_extra': {'clip_denoised': 'false',
'fuzzy_prompt': 'false',
'rand_mag': '0.05',
'randomize_class': 'true'},
'advanced_perlin_init': {'perlin_init': "false {type: 'boolean'} : Perlin "
'init will replace your init',
'perlin_mode': "mixed ['mixed', 'color', 'gray']"},
'animation_2d': {'angle': "'0:(0)' {type: 'string'} : All rotations are "
'provided in degrees.',
'far_plane': "10000 {type: 'number'}",
'fov': "40 {type: 'number'}",
'interp_spline': 'Linear '
"['Linear','Quadratic','Cubic']{type: "
"'string'} : Do not change, currently will "
'not look good.',
'key_frames': "true {type: 'boolean'}",
'max_frames': "10000 {type: 'number'}",
'midas_depth_model': "dpt_large {type: 'string'}",
'midas_weight': "0.3 {type: 'number'}",
'near_plane': "200 {type: 'number'}",
'padding_mode': "border {type: 'string'}",
'rotation_3d_x': "'0: (0)' {type: 'string'}",
'rotation_3d_y': "'0: (0)' {type: 'string'}",
'rotation_3d_z': "'0: (0)' {type: 'string'}",
'sampling_mode': "bicubic {type: 'string'}",
'translation_x': "'0: (0)' {type: 'string'}",
'translation_y': "'0: (0)' {type: 'string'}",
'translation_z': "'0: (10.0)' {type: 'string'}",
'zoom': "'0: (1), 10: (1.05)' {type: 'string'} : # `zoom` is "
'a multiplier of dimensions, 1 is no zoom.'},
'animation_3d_turbo_mode': {'turbo_mode': "false {type: 'boolean'} : (Starts "
'after frame 10,) skips diffusion '
'steps and just uses depth map to '
'warp images for skipped frames. '
'Speeds up rendering by 2x-4x, and '
'may improve image coherence '
'between frames. For different '
'settings tuned for Turbo Mode, '
'refer to the original Disco-Turbo '
'Github: '
'https://github.com/zippy731/disco-diffusion-turbo',
'turbo_preroll': '10 # frames',
'turbo_steps': '"3" ["2","3","4","5","6"] {type: '
'"string"}'},
'animation_3d_vr_mode': {'vr_eye_angle': "0.5 {type: 'number'} : "
'`vr_eye_angle` is the y-axis '
'rotation of the eyes towards the '
'center',
'vr_ipd': "5.0 {type: 'number'} : interpupillary "
'distance (between the eyes)',
'vr_mode': "false {type: 'boolean'} : Enables stereo "
'rendering of left/right eye views '
'(supporting Turbo) which use a different '
'(fish-eye) camera projection matrix. '
"Note the images you're prompting will "
'work better if they have some inherent '
'wide-angle aspect. The generated images '
'will need to be combined into left/right '
'videos. These can then be stitched into '
'the VR180 format. Google made the VR180 '
'Creator tool but subsequently stopped '
"supporting it. It's available for "
'download in a few places including '
'https://www.patrickgrunwald.de/vr180-creator-download. '
'The tool is not only good for stitching '
'(videos and photos) but also for adding '
'the correct metadata into existing '
'videos, which is needed for services '
'like YouTube to identify the format '
'correctly. Watching YouTube VR videos '
"isn't necessarily the easiest depending "
'on your headset. For instance Oculus '
'have a dedicated media studio and store '
'which makes the files easier to access '
'on a Quest '
'https://creator.oculus.com/manage/mediastudio/. '
'The command to get ffmpeg to concat your '
'frames for each eye is in the form: '
'`ffmpeg -framerate 15 -i frame_%4d_l.png '
'l.mp4` (repeat for r)'},
'basic': {'clip_guidance_scale': "5000 {type: 'number'}",
'cutn_batches': "4 {type: 'number'}",
'range_scale': "150 {type: 'number'}",
'sat_scale': "0 {type: 'number'}",
'skip_augs': "false {type: 'boolean'}",
'steps': "250 [25,50,100,150,250,500,1000] {type: 'raw', "
'allow-input: true}',
'tv_scale': "0 {type: 'number'}",
'width_height': "[1280, 768] {type: 'raw'}"},
'coherency': {'frames_scale': "1500 {type: 'integer'} : `frame_scale` tries "
'to guide the new frame to looking like the old '
'one. A good default is 1500.',
'frames_skip_steps': "'60%' ['40%', '50%', '60%', '70%', '80%'] "
"{type: 'string'} : `frame_skip_steps` "
'will blur the previous frame - higher '
'values will flicker less but struggle to '
'add enough new detail to zoom into.'},
'cutn_scheduling': {'cut_ic_pow': "1 {type: 'number'}",
'cut_icgray_p': "'[0.2]*400+[0]*600' {type: 'string'}",
'cut_innercut': "'[4]*400+[12]*600' {type: 'string'}",
'cut_overview': "'[12]*400+[4]*600' {type: 'string'} \n"
'>> Format: `[40]*400+[20]*600` = 40 cuts '
'for the first 400 /1000 steps, then 20 '
'for the last 600/1000. cut_overview and '
'cut_innercut are cumulative for total '
'cutn on any given step. Overview cuts '
'see the entire image and are good for '
'early structure, innercuts are your '
'standard cutn.'},
'init_image': {'init_image': "None {type: 'string'}",
'init_scale': "1000 {type: 'integer'}",
'skip_steps': "10 {type: 'integer'} *Make sure you set "
'skip_steps to ~50% of your steps if you want to '
'use an init image.*'},
'run': {'animation_mode': "None ['None', '2D', '3D', 'Video Input'] "
"{type:'string'}",
'batch_name': "TimeToDisco {type: 'string'}",
'batch_size': '1',
'diffusion_sampling_mode': "ddim ['plms','ddim']",
'display_rate': "20 {type: 'number'}",
'n_samples': "6 {type: 'number'}",
'resume_from_frame': 'latest',
'resume_run': 'false',
'retain_overwritten_frames': 'true',
'run_to_resume': 'latest',
'show_collage': 'true',
'use_secondary_model': 'true'},
'saving': {'intermediate_saves': "0 {type: 'raw'} : Intermediate steps will "
'save a copy at your specified intervals. '
'You can either format it as a single '
'integer or a list of specific steps. A '
'value of `2` will save a copy at 33% and '
'66%. 0 will save none. A value of `[5, 9, '
'34, 45]` will save at steps 5, 9, 34, and '
'45. (Make sure to include the brackets)',
'intermediates_in_subfolder': "true {type: 'boolean'}",
'steps_per_checkpoint': None},
'transformation': {'transformation_percent': '[0.09]',
'use_horizontal_symmetry': "false {type: 'boolean'}",
'use_vertical_symmetry': "false {type: 'boolean'}"},
'video_init': {'video_init_clip_guidance_scale': "1000 {type: 'number'}",
'video_init_cutn_batches': "4 {type: 'number'}",
'video_init_range_scale': "150 {type: 'number'}",
'video_init_sat_scale': "300 {type: 'number'}",
'video_init_skip_steps': "50 {type: 'integer'}",
'video_init_steps': '100 [25,50,100,150,250,500,1000]{type: '
"'raw', allow-input: true}",
'video_init_tv_scale': "0.1 {type: 'number'}"},
'video_init_coherency': {'force_flow_generation': "false {type:'boolean'}",
'video_init_frames_scale': "15000 {type: 'integer'} "
': `frame_scale` tries to '
'guide the new frame to '
'looking like the old '
'one. A good default is '
'1500.',
'video_init_frames_skip_steps': "'70%' ['40%', "
"'50%', '60%', "
"'70%', '80%'] "
"{type: 'string'} : "
'`frame_skip_steps` '
'will blur the '
'previous frame - '
'higher values will '
'flicker less but '
'struggle to add '
'enough new detail '
'to zoom into.'},
'video_init_flow': {'video_init_blend_mode': "optical flow ['None', 'linear', "
"'optical flow'] : Call optical "
'flow from video frames and warp '
'prev frame with flow',
'video_init_check_consistency': 'false',
'video_init_flow_blend': "0.999 {type: 'number'} : 0 - "
'take next frame, 1 - take prev '
'warped frame',
'video_init_flow_warp': "true {type: 'boolean'} : Call "
'optical flow from video frames '
'and warp prev frame with flow'},
'video_init_input': {'extract_nth_frame': "2 {type: 'number'}",
'persistent_frame_output_in_batch_folder': 'true {type: '
"'boolean'}",
'video_init_file': "init.mp4 {type: 'string'}",
'video_init_path': '{..path.init_dir}/{.video_init_file}',
'video_init_seed_continuity': "false {type: 'boolean'}"},
'video_output': {'blend': '0.5',
'fps': '12',
'init_frame': "1 {type: 'number'} : This is the frame where "
'the video will start',
'last_frame': "final_frame {type: 'number'} \n"
'>> You can change i to the number of the last '
'frame you want to generate. \n'
'It will raise an error if that number of '
'frames does not exist.',
'skip_video_for_run_all': 'false',
'video_init_check_consistency': 'false',
'view_video_in_cell': 'false'}}
disco.parameters("display")
[display_rate]
20 {type: 'number'}